home *** CD-ROM | disk | FTP | other *** search
- ***************************************************************************
- *
- * McKean Consulting
- * Robin W. McKean
- * 1042 Braddock Circle
- * Woodstock GA 30188
- *
- * MLIST.VBX V4.02.0000
- *
- * Multi-Purpose List Box Control for Visual Basic 3.0
- *
- ***************************************************************************
-
- MLIST is a custom control for managing the way your data appears in a list
- box. MLIST is a property for property replacement of the standard List Box
- control which comes with Visual Basic 3.0. In addition, there are many more
- features which MLIST can do that you can't do with the normal List Box. Some
- of these features are:
-
- * Set up owner draw columnar data in the list box. This is NOT a
- MULTI-COLUMN list box. MLIST now has this feature, but the MLIST
- List Box scrolls vertically, like a normal list box. Your data is
- arranged in columns, with specific drawing flags setup for each
- "Drawing Region". Think of each line as being broken up into
- different areas, each with its own drawing flags and data.
-
- * Make a drawing region a bitmap or a checkbox. You have control
- over the entire list's bitmaps through the default bitmap property,
- or you can set individual lines bitmap properties.
-
- * Control individual line colors in the list box
-
- * Total control over the checked and unchecked states of lines
-
- * Now MLIST has aligned bitmaps as well. You specifiy the bitmap,
- the text, and the alignment (top, bottom, right, left), and MLIST
- will draw the text and the bitmap in the area you define.
-
- * New in verions 4.00. You can now have true MUTLIPLE COLUMN list
- boxes, with bitmaps and check boxes. Multiple columns are set
- up through setting the LBS_MULTICOLUMN style for the list box.
- You control the width of each item. This attribute differs in
- that each line has a certain width. So it may take two or more
- columns of items to actually fill a line
-
- * Checking and Selecting a range of line items
-
- * Properties to find closest match and find exact matches in the
- list box.
-
- ***************************************************************************
-
- This ZIP file contains:
-
- MLIST.VBX VB version of the MLIST custom control
- PROJECT1.MAK Sample project file for MLIST
- FORM1.FRM Form used by the sample project
- READ.ME This file
- PLUS.BMP Bitmap used in example
- PAGE.BMP Ditto
-
- ***************************************************************************
-
- REGISTRATION
-
- Time for the sob story. This Multi-Column List Box is Shareware. It is
- NOT crippled in anyway. When you download this custom control, you have
- the same custom control that I am using in my everyday VB programming.
- As a Shareware contributor, I am counting on the honor and moral fiber of
- every person who downloads this custom control to do the right thing. I
- have contributed and participated in the Shareware arena for years now.
- Your small contribution can make a difference to me and my family...
-
- Right now, the maximum string size in the List Box is 255 characters. Let me
- know if this causes a problem. I don't anticipate anyone needing to display
- more than this number of characters to the screen.
-
- If you like and appreciate this custom control...
-
- 1) Small time developers like me, send $10.00 to the address listed above
- 2) Corporate users send $15.00 to the address listed above
- 3) Register in the Compuserve SWREG forum ID 1585
-
- Registered users may purchase the source...
-
- Send $25.00 to me at the above address.
-
- This control is written in C and has been compiled using both Borland C++
- 3.1 and Visual C++ 1.0.
-
- You may now register this control in the SWREG on Compuserve. Type GO SWREG.
- If you want the source, you will still have to write me...
-
- Corporate users should register via mail.
-
- ***************************************************************************
-
- WARRANTY
-
- The control, as is, works the way that I want it to. This does not mean
- that it will work the way that you want it to. Along those lines, I
- totally disclaim that the control will do anything whatsoever. This
- includes any implied abilities and any WARRANTIES, including those for
- SUITABILITY for a particular purpose, MERCHANTIBILITY, and all that other
- bull crap.
-
- ***************************************************************************
-
- PROGRAMMER'S NOTES (or, what I need to know to use this custom control)
-
- The Multi-Column List Box is an enhanced List Box control. The following
- is a desciption of each additional control. What it does, and how to
- use it in your own VB programming. For additional control properties, see
- those for properties included in the standard list box control. MLIST now
- contains all standard controls. The ones listed below are additions.
-
- ItemHeight
-
- This property is responsible for controlling the height of each individual
- line item in the list box. It defaults to 195 Twips, the height of the
- font used by the standard list box. You should adjust this height if you
- change the font, font size, etc..
-
- I'm not sure whether or not this property will change the height of the lines
- after the list box has already been created. I did not design the list box
- control to have the height of the items change dynamically. Set the height
- of this item at design time, and the font, and your list box will be fine.
- Experiment with this during run-time if you like, and let me know how it
- works out, and how I can make this item work more to your liking.
-
- DrawRegions
-
- This item determines the number of drawing regions on each line. This is
- basically equivelent to the number of COLUMNS, but this list box will still
- scroll like a normal list box. When setting this property, the control
- clears the flags for the draw regions and sets them to left aligned, single
- line, and centered vertically. Consult the Windows API for DrawText to
- see what exactly these flags mean.
-
- ItemLength
-
- This is an indexed property which corresponds to the length of each drawing
- region. If you want a drawing region to be a specific length, set that
- drawing region's length to the desired setting in twips. For example...
-
- MList1.DrawRegions = 2
- MList.ItemLength(1) = 500
- MList.ItemLength(2) = 500
-
- ' Generates an out of index error
- MList1.ItemLength(0) = XXX
- MList1.ItemLength(3) = XXX
-
- It is probably a good idea to set the lengths of all drawing regions when you
- are changing the defaults.
-
- DrawFlags
-
- This is an indexed property which corresponds to the flags of each drawing
- region. If you want a drawing region to be drawn in a specific manner, set
- that drawing region's flags to the desired settings. For specific flags,
- look up the DrawText API function in the Windows API Reference. In the
- following example, I setup two drawing regions and set the second drawing
- region's flags to right justify the text. In this example, the second
- drawing region displays currency values.
-
- Const DT_RIGHT = 2
- Const DT_VCENTER = 4
- Const DT_SINGLELINE = 32
-
- MList1.DrawRegions = 2
- MList1.Flags(2) = DT_RIGHT + DT_VCENTER + DT_SINGLELINE
- MList.ItemLength(1) = 500
- MList.ItemLength(2) = 500
-
- ActiveRegion
-
- Setting this property affects the next two properties. It defines the
- DrawingRegion (or index or column) that TextRegion and ListRegion will
- return. Perhaps an example is in order.
-
- My list box is divided up into three columns, name, account number, dollar
- amount. I want to get the account number for the currently selected line
- as well as the first item...
-
- MList1.ActiveRegion = 2
- aString$ = MList1.TextRegion ' Gets 2nd column of current text
- bString$ = MList1.ListRegion(0) ' 2nd column of item at index 0
-
- TextRegion
-
- This property will return the ActiveRegion in the currently selected text.
- See the above "ActiveRegion". Corresponds to a DrawRegion of the Text property.
- These values can also be written to at run time.
-
- ListRegion
-
- This property will return the ActiveRegion in the item at the specific index.
- See the above "ActiveRegion". Corresponds to a DrawRegion of the List property.
- These values can also be written to at run time.
-
- DefPicture
-
- This is the default bitmap to be displayed in the ImageRegion when a specific
- bitmap has not been assigned to that items ItemPicture property. Please see
- the demo on setting your own default picture and ItemPicture properties.
-
- ImageType
-
- This determines what type of image we are dealing with in our image region.
- If this property is set to 0, then the ImageRegion property is ignored and
- only text is dislayed. If this image type is valid, then a checkbox or
- bitmap is displayed in the ImageRegion.
-
- Note that when the image type is set to AlignBitmap, the normal drawing
- regions no longer apply. Anybody got a problem with that???
-
- ImageRegion
-
- This property specifies which region contains the image region. This value
- should be any number between 1 and the number of DrawRegions. You may not
- set this property to a value of less than zero or greater then DrawRegions.
- When setting up your DrawRegions, the following is a good example:
-
- MList1.DrawRegions = 3
- MList1.ImageRegion = 1
-
- MList1.ItemLength(1) = 100 ' Bitmap is in here
- MList1.ItemLength(2) = 500
- MList1.ItemLength(3) = 750
-
- ' Don't leave a space for the ImageRegion in your strings
- MList1.AddItem "Region2" + Chr$(9) + "Region3"
- MList1.AddItem "Region22" + Chr$(9) + "Region33"
-
- The ImageRegion is ignored when calculating the "piece" of text that goes in
- that region.
-
- Checked
-
- This property is very similar to the Selected property. In a Multi-Column
- list box with the ImageType set 2 (CheckBox), this property will return to
- you whether or not that line item is checked or not. For example:
-
- For X% = 0 To MList1.ListCount - 1
-
- If MList1.Checked(X%) Then
- Debug.Print "I am Checked! "; X%
- Else
- Debug.Print "I am not checked! "; X%
- End If
- Next X%
-
- ' Check the first item
- MList1.Checked(0) = True
-
- ItemPicture
-
- This property is an array of pictures which correspond to the bitmaps for
- each line item in the list box. If this item is not set by you, then
- the MList uses the DefPicture property.
-
- ' Change the first items picture in the list box
- MList1.ItemPicture(0) = Image1.Picture
-
- ItemForeColor
-
- This property is an array of color which correspond to the foreground color
- for each line item in the list box. If this item is not set by you, then
- the MList uses the default foreground color property.
-
- ' Change the first items foreground color to white
- MList1.ItemForeColor(0) = RGB(255,255,255)
-
- ItemBkColor
-
- This property is an array of color which correspond to the background color
- for each line item in the list box. If this item is not set by you, then
- the MList uses the default background color property.
-
- ' Change the first items background color to black
- MList1.ItemBkColor(0) = RGB(0,0,0)
-
- Alignment
-
- This property controls the placement of the bitmap when the image type is
- set to 4, AlignBitmap. See the demo for details, but basically the values
- for this property are:
-
- 1 - Align the bitmap to the left, centered, then the text, centered
- vertically and left justified.
- 2 - Align the bitmap on top, centered, then the text, centered
- horizontally and vertically.
- 3 - Align the bitmap to the right, centered, then the text, centered
- vertically and left justified.
- 4 - Align the bitmap on bottom, centered, then the text, centered
- horizontally and vertically.
-
- Note that when the image type is set to AlignBitmap, the normal drawing
- regions no longer apply. Anybody got a problem with that???
-
- MultiColumn
-
- This turns the list box into a true multiple column list box. The list box
- will scroll horizontal instead of vertical. A default item width is provided,
- but you, the developer, should override this property. This property should
- be set to true for multi-column, or false (the default) for normal list box
- behavior.
-
- ItemWidth
-
- The property specifies the width of each line in a multiple column list box.
- The width is set in Twips. The normal drawing regions still apply, but I
- can't think of a reason why someone would want to divide line items in a
- column list box into more columns.
-
- FindString
-
- Setting this property will cause the list box to search for a string with
- the closest match from the current ListIndex. If one is found, that string
- is set to the current ListIndex. This is useful for moving items through
- a list box while typing the string in an edit control, ie. Search in Help.
-
- FindStringExact
-
- This property is the same as above, except that it will search for an exact
- match.
-
- RangeStart
-
- This property marks the beginning line item for RangeSelected or RangeChecked.
- The offset is 0 based, so the first item is 0.
-
- RangeEnd
-
- This property marks the ending line item for RangeSelected or RangeChecked.
-
- RangeSelected
-
- All items in the range RangeStart to RangeEnd are marked as selected in the
- list box. If the list box is not multi-select, then this is ignored.
-
- MList1.RangeStart = 0
- MList1.RangeEnd = 3
- MList1.RangeSelected = True
-
- RangeChecked
-
- All items in the range RangeStart to RangeEnd are marked as checked in the
- list box.
-
- MList1.RangeStart = 0
- MList1.RangeEnd = 3
- MList1.RangeChecked = False
-
- SetHzScroll
-
- When all is said and done, and you are through setting up your list box, and
- your columns extend past the displayable area of the list box, setting this
- property to True will cause the MLIST control to add up all of the drawing
- regions and add a horizontal scroll bar to the list box if one is neccessary.
-
- ***************************************************************************
-
- FORMATTING STRINGS
-
- You should place the Tab character between each column in your string. The
- following example formats a string for the DrawFlags example:
-
- MList1.AddItem "Robin W. McKean" + Chr$(9) + "$100.00"
-
- The following string is for three columns:
-
- MList1.AddItem "Robin W. McKean"+Chr$(9)+"$100.00"+Chr$(9)+"True"
-
- Remember, you do NOT have to include a column for the ImageRegion. If
- the ImageRegion property was 1 and the DrawRegions property was 3, then
- the following line would work fine (3-1=2)
-
- MList1.AddItem "Robin W. McKean"+Chr$(9)+"$100.00"
-
- ***************************************************************************
-
- REACHING THE AUTHOR
-
- I can be reached via U.S. Mail at the address listed above. You can reach
- me via E-Mail at the following locations...
-
- Compuserve: Robin W. McKean
- 72622,1403
-
- Shareware South: Robin W. McKean
- Atlanta, GA
-
- I'm on Compuserve once or twice a day. I check Shareware South about once
- a week.
-
- ***************************************************************************
-
- REVISION HISTORY
-
- 3.00.0000 Initial release of the MLIST.VBX Custom Control
- 3.01.0000 Fixed "Bad Index" error message when setting Selected
- property to True|False.
- Added ItemData property to control.
- Added ListIndex property to control.
- Fixed an apparent bug in the VB API that was passing right
- mouse button clicks to the Click event, but not the left
- mouse button.
- 3.02.0000 Fixed a ton of problems. Namely, the page down didn't work.
- Delete current controls and rebuild to fix this problem.
- Added ALL default controls for the standard list box.
- Tested all of them before uploading.
- 3.03.0000 Fixed the index problem with the List property. If anything,
- I am guilty of being over enthusiastic. I apologize to those
- who got the previous version and thought it sucked. Probably
- because it did. I added bitmaps and checkboxes as well as
- the ability to change the color of a specific line. You can
- also change the bitmap of a specific line item.
- 3.04.0000 Fixed the bug with setting the Checked property, and then not
- having the user be able to double click it or click the box
- to change it back. Added the AlignBitmap image type and
- the Alignment property.
- 4.00.0000 Added the Multicolumn property and item width. Added the
- FindString and FindStringExact properties for searching
- the list box. Added the range properties for checking
- and selecting multiple line items.
- 4.01.0000 Removed the 64k limit. MLIST will now allow more than 64k
- worth of data to be added to it. Also, quit handling default
- methods, such as Move (which didn't work), Refresh, and others.
- Fixed problem with RemoveItem not deleting lines data.
- Changing the way MLIST handled strings did the job.
- 4.02.0000 Removed a bug which caused a GP fault when more than 16 drawing
- regions were requested by the user. Reworked VB2.0 compatibility
- strategy.
-
- ***************************************************************************
-
- ACKNOWLEDGEMENTS
-
- I would like to thank Simon, Kevin, and Neil for their input. A great C++
- programmer does not a good VB programmer make... Please, Please, Please,
- take a few minutes to notify me if there are any bugs. I hate bugs...
-
- Thanks to Paul for the check box problem.
-
- Thanks to Alex for providing info on VB 2.0 problems.
-
- ***************************************************************************
-